# -*- coding:utf-8 -*-
'''
把一个数组最开始的若干个元素搬到数组的末尾，我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转，输出旋转数组的最小元素。
 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转，该数组的最小值为1。 NOTE：给出的所有元素都大于0，若数组大小为0，请返回0。
'''


class Solution:
    def minNumberInRotateArray(self, rotateArray):
        # write code here
        # 无耻法 min()一行
        # 普通法
        if len(rotateArray) == 0:
            return 0
        i = 0
        while i < len(rotateArray):
            if rotateArray[i+1] < rotateArray[i]:
                return rotateArray[i+1]
            i += 1
        return rotateArray[0]


    # 二分查找法
    def minNumberInRotateArray_optim(self, rotateArray):
        if len(rotateArray) == 0:
            return 0
        low = 0
        high = len(rotateArray)-1
        while high > low+1:
            mid = int((high + low) / 2)
            if rotateArray[mid] >= rotateArray[low]:
                low = mid
            else:
                high = mid
        return rotateArray[high]

s = Solution()
print(s.minNumberInRotateArray_optim([4,5,6,1,2,3]))


